草庐IT

Android AsyncTask 内存泄漏

全部标签

c++ - 函数内存管理C++

我有一个有点蹩脚的问题,但现在是我终于弄清楚这个问题的时候了。考虑带有一些参数和返回类型的常规函数​​。我的问题是:是否总是复制一些参数?我的意思是即使函数期望引用或指针作为参数,实际上也创建了新的引用/指针,对吗?当函数结束时,是否会调用一些析构函数?和返回值一样吗?返回值是否也从实际执行函数的上下文中复制?还是那些只是某处的地址,上下文中的值也被破坏了?我可能没有表达得太清楚所以......如果你只是用你的方式解释当调用某些函数时它如何与内存一起工作我将不胜感激。我只是对处理器的功能有一个随意的想法,但我已经处理过汇编程序,所以至少有一些东西可以使用。

c++ - 用 C++ 编写的进程导出处的堆内存和操作系统

我现在怀疑操作系统在进程生命周期方面的作用。我正在使用Linux。假设我有一个使用new在堆中创建一组对象的应用程序。在应用程序的生命周期中,我不需要删除任何这些对象,除非在退出应用程序时或在退出以进行清理之前发生异常。假设我没有在应用程序结束时为所有这些对象调用delete,操作系统通常会回收/释放所有分配的堆以使其在进程退出时再次可用吗?如果进程因为异常或调用return或exit而退出,是否总是会出现这种情况?如果这是真的,这意味着如果我不调用delete,将不会对操作系统或机器上运行的其他应用程序产生任何影响。对吧?我通常使用boostsharedpointers或使用dele

c++ - 如果在构造函数中抛出异常,为对象分配的内存是否会自动删除?

假设有这段代码:classCFoo{public:CFoo(){iBar=newCBar();}private:CBar*iBar;};....CFoo*foo=newCFoo();当上面的行被执行时,首先分配内存来保存CFoo对象。但是如果newCBar()行抛出异常(由于内存不足),系统会自动释放之前分配给CFoo对象的内存吗?我认为它必须,但找不到任何明确的引用资料。如果没有,编码器如何释放内存,因为它不会分配给foo? 最佳答案 是的,分配给CFoo对象的内存在这种情况下将被释放。由于分配失败导致的异常导致CFoo构造函数无

c++ - 如何以及何时分配全局或静态数组的内存?

当在C++中定义一个全局或静态数组时,它的内存不会在程序开始时立即保留,而是只有在我们写入数组时才会保留。让我惊讶的是,如果我们只写入数组的一小部分,它仍然不会保留整个内存。考虑以下稀疏写入全局数组的小示例:#include#include#defineMAX_SIZE250000000doubleglobal[MAX_SIZE];intmain(intargc,char**argv){if(argc\n",argv[0]);exit(EXIT_FAILURE);}size_tstep_size=atoi(argv[1]);for(size_ti=0;i现在针对不同的步长执行此操作并查

c++ - 打印数组元素内存地址 C 和 C++,为什么输出不同?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Howtosimulateprintf's%pformatwhenusingstd::cout?我尝试用C和C++打印出数组元素的内存地址。在C中:chararray[10];inti;for(i=0;i我得到了内存地址:0xbfbe3312、0xbfbe3313、0xbfbe3314、...。但是如果我尝试用C++做同样的事情:chararray[10];for(inti=0;i我得到了这个输出:�P�����k��为什么不一样?我应该在C++中以不同的方式使用cout来打印内存地址吗?我应该如何打印出内存

c++ - C++中对象的动态内存分配

我正在尝试为一个非常简单的C++程序中的对象动态分配(它不像现在那样动态,但最终会动态分配)内存。我是新来的类(class),最近才开始玩C++,把C抛在了后面。这是代码:#includeusingnamespacestd;classTest{private:inti;public:Test(int);~Test();voidprint();};Test::Test(intii){i=ii;}Test::~Test(){i=0;coutprint();//thisworksaswellfor(inti=0;iprint();/*thisshowsthatthevalueofi=1..s

c++ - pthread_cond_signal 或 pthread_cond_broadcast 调用是否意味着写入内存屏障?

条件变量通常用于在互斥量下修改它们所指的状态。然而,当状态只是一个单一的只设置标志时,就不需要互斥锁来阻止同时执行。所以有人可能想做这样的事情:flag=1;pthread_cond_broadcast(&cvar);然而,这只有在pthread_cond_broadcast暗示写内存屏障时才是安全的;否则,等待线程可能会在标志写入之前看到条件变量广播。也就是说,等待线程可能会唤醒,消耗cvar信号,但看到标志仍然是0。所以,我的问题是:pthread_cond_broadcast和pthread_cond_signal调用是否意味着写入内存屏障?如果是这样,这在相关的POSIX(或其

c++ - 用魔数(Magic Number)初始化一 block 内存的简洁方法

我所指的几个例子:typedefstructSOME_STRUCT{unsignedintx1;unsignedintx2;unsignedintx3;unsignedintx4;//WhatIexpectedwouldwork,butdoesn't;the2ndparametergets//turnedintoan8-bitquantityatsomepointwithinmemsetSOME_STRUCT(){memset(this,0xFEEDFACE,sizeof(*this));}//Somethingthatworked,butseemshokey/hackishSOME_

c++类实例内存布局再一次

我知道之前有人问过这个问题,但在你给我一个负号并报告重复的问题之前,请思考一下:在之前的所有回答中,每个人都说对象内存布局取决于编译器。那么,共享库(*.dll、*.so)如何可以导出和导入c++类,即使来自不同的编译器,它们也一定可以组合?考虑在mingw下编写的DirectX应用程序。DirectX是使用MSVC++编译的,那么这些环境如何在内存布局上达成一致?我知道DirectX严重依赖C++类和多态性。以不同的方式提问:假设我选择了一个架构(例如Windows、intelx86)并且我正在尝试编写一个新的编译器。我怎么知道如何访问由另一个编译器编译的.dll库提供的类实例(vt

c++ - 如何处理在 C/C++ 中返回的指向动态内存的指针

我想知道在C和C++中使用指向动态内存的指针处理内存泄漏的协议(protocol)。例如,strtok返回一个char*。据推测,返回的指针最终必须被释放/删除。我注意到referencepage甚至没有提到这一点。那是因为这只是假设吗?另外,你怎么知道是删除还是释放?是否需要研究找出每个函数最初使用的是什么语言,然后假设所有C程序都使用malloc/free而C++使用new/delete? 最佳答案 strtok不会返回指向新分配内存的指针,而是返回指向先前分配的内存位置的指针。让我们假设:charString[1024];st